/******************************************************************************
 *      Mestrado em Ciência da Computação - UFMS
 *		Redes de Computadores - Prof. Dr. Ronaldo Alves Ferreira
 *		Alunos: Geraldo Landre, Marcel Tolentino, Vinícius Bueno
 *****************************************************************************/
/* tcpostate.c - tcpostate */

#include "tcpfms.h"
#include "tcb.h"
#include "tcp.h"

/*------------------------------------------------------------------------
 *  tcpostate - do TCP output state processing after an ACK
 *------------------------------------------------------------------------
 */
int tcpostate(struct tcb *ptcb, int acked)
{
    if (acked <= 0)
        return OK;	/* no state change */
    if (ptcb->tcb_ostate == TCPO_REXMT) {
        ptcb->tcb_rexmtcount = 0;
        ptcb->tcb_ostate = TCPO_XMIT;
    }
    if (ptcb->tcb_sbcount == 0) {
        ptcb->tcb_ostate = TCPO_IDLE;
        return OK;
    }
    tcpkick(ptcb);
    return OK;
}
